package cloud.topdaddy.base.utils;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
 * 密码加密工具类 - 可直接运行测试
 * 基于Spring Security的BCryptPasswordEncoder实现
 */
public class PasswordEncryptionUtil {

    private static final PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

    /**
     * 加密密码
     *
     * @param rawPassword 原始密码
     * @return 加密后的密码
     */
    public static String encode(String rawPassword) {
        return passwordEncoder.encode(rawPassword);
    }

    /**
     * 验证密码
     *
     * @param rawPassword     原始密码
     * @param encodedPassword 加密后的密码
     * @return 验证结果
     */
    public static boolean matches(String rawPassword, String encodedPassword) {
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }

    /**
     * 主函数 - 可直接运行测试密码加密
     */
    public static void main(String[] args) {
        // 测试密码加密
//        String rawPassword = "admin123";
        String rawPassword = "testuser123";
        System.out.println("原始密码: " + rawPassword);

        // 生成加密密码
        String encodedPassword = encode(rawPassword);
        System.out.println("加密后的密码: " + encodedPassword);

        // 验证密码
        boolean isValid = matches(rawPassword, encodedPassword);
        System.out.println("密码验证结果: " + isValid);

        // 验证错误密码
        boolean isInvalid = matches("wrongPassword", encodedPassword);
        System.out.println("错误密码验证结果: " + isInvalid);

        // 演示同一个密码多次加密结果不同（BCrypt特性）
        System.out.println("\nBCrypt特性演示（同一密码多次加密结果不同）:");
        for (int i = 1; i <= 3; i++) {
            System.out.println("第" + i + "次加密: " + encode(rawPassword));
        }
    }
}
